package com.king.modules.system.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.king.modules.system.domain.SysRoleEntity;
import com.king.modules.system.domain.SysUserEntity;
import com.king.modules.system.domain.SysUserRoleEntity;

/**
 * 用户表 数据层
 * 
 * @author king
 */
public interface SysUserMapper extends BaseMapper<SysUserEntity>{
	


	/**
	 * 通过用户名查询用户
	 * 
	 * @param userName
	 *            用户名
	 * @return 用户对象信息
	 */
	public SysUserEntity selectUserByUserName(String userName);

	/**
	 * 通过用户ID查询用户
	 * 
	 * @param userId
	 *            用户ID
	 * @return 用户对象信息
	 */
	public SysUserEntity selectUserById(Long userId);
	
	/**
	 * 根据条件分页查询用户列表
	 * 
	 * @param sysUser
	 *            用户信息
	 * @return 用户信息集合信息
	 */
	public List<SysUserEntity> selectUserList(SysUserEntity sysUser);

	/**
	 * 根据条件分页查询已配用户角色列表
	 * 
	 * @param user
	 *            用户信息
	 * @return 用户信息集合信息
	 */
	public List<SysUserEntity> inSelectRoleUsers(SysUserEntity user);

	/**
	 * 根据条件分页查询未分配用户角色列表
	 * 
	 * @param user
	 *            用户信息
	 * @return 用户信息集合信息
	 */
	public List<SysUserEntity> unSelectRoleUsers(SysUserEntity user);
	
	/**
	 * 查询已选流程组用户
	 * @param user
	 * @return
	 */
	public List<SysUserEntity> inSelectProcessUsers(SysUserEntity user);
	
	/**
	 * 查询未选流程组用户
	 * @param user
	 * @return
	 */
	public List<SysUserEntity> unSelectProcessUsers(SysUserEntity user);
	

	/**
	 * 新增用户信息
	 * 
	 * @param user
	 *            用户信息
	 * @return 结果
	 */
	public int insertUser(SysUserEntity user);

	/**
	 * 修改用户信息
	 * 
	 * @param user
	 *            用户信息
	 * @return 结果
	 */
	public int updateUser(SysUserEntity user);
	

	/**
	 * 修改用户密码
	 * @param id
	 * @param password
	 * @return
	 */
	public int updateUserPwd(@Param("id") Long id, @Param("mr") Long mr, @Param("password") String password);

	/**
	 * 修改用户头像
	 * 
	 * @param userName
	 *            用户名
	 * @param avatar
	 *            头像地址
	 * @return 结果
	 */
	public int updateUserAvatar(@Param("id") Long id, @Param("avatar") String avatar);


	/**
	 * 通过用户ID删除用户
	 * 
	 * @param userId
	 *            用户ID
	 * @return 结果
	 */
	public int deleteUserById(Long userId);

	/**
	 * 批量删除用户信息
	 * 
	 * @param userIds
	 *            需要删除的用户ID
	 * @return 结果
	 */
	public int deleteUserByIds(Long[] userIds);

	/**
	 * 校验用户名称是否唯一
	 * 
	 * @param userName
	 *            用户名称
	 * @return 结果
	 */
	public SysUserEntity checkUserNameUnique(String userName);

	/**
	 * 校验手机号码是否唯一
	 *
	 * @param phonenumber
	 *            手机号码
	 * @return 结果
	 */
	public SysUserEntity checkPhoneUnique(String phonenumber);

	/**
	 * 校验email是否唯一
	 *
	 * @param email
	 *            用户邮箱
	 * @return 结果
	 */
	public SysUserEntity checkEmailUnique(String email);

	/**
	 * 用户未选的角色列表
	 * @param userRole
	 * @return
	 */
	public List<SysRoleEntity> unSelectRoles(SysUserRoleEntity userRole);

	/**
	 * 用户已选的角色列表
	 * @param userRole
	 * @return
	 */
	public List<SysRoleEntity> inSelectRoles(SysUserRoleEntity userRole);

}
